public class FitnessCalc {

    static int D = 100;
    static float Precision = (float)(70./1024.);


    // Récupère le diamètre du premier cercle
    static double getD1(Individual id) {
        double d1 = 0;
        for(int i=0 ; i<id.size()/2 ; i++) {
            d1 += Precision*id.getGene(i)*Math.pow(2,i);
        }
        return Math.round(d1*10d)/10d;
    }


    // Récupère le diamètre du deuxième cercle
    static double getD2(Individual id) {
        double d2 = 0;
        for(int i=id.size()/2 ; i<id.size() ; i++) {
            d2 += Precision*id.getGene(i)*Math.pow(2,i%10);
        }
        return Math.round(d2*10d)/10d;
    }


    // Calcule le fitness d'un individu
    static double getFitness(Individual individual) {
        double d1 = getD1(individual);
        double d2 = getD2(individual);    
        return D*D - d1*d1 - d2*d2 - (D-d1-d2)*(D-d1-d2);
    }
}

